#define _CRT_SECURE_NO_WARNINGS
#pragma warning(disable : 4996)
#pragma warning(disable : 6031)

#include"RBTree.h"
#include"MyMap.h"
#include"MySet.h"

//int main()
//{
//	int a = 0;
//	RBTree<int, int> rb;
//	rb.Insert(make_pair(1, 1));
//	rb.Insert(make_pair(5, 5));
//	rb.Insert(make_pair(4, 4));
//	rb.Insert(make_pair(8, 8));
//
//	rb.InOrder();
//	RBTree<int, int>::iterator it = rb.begin();
//	/*while (it != rb.end())
//	{
//		cout << it->first << ":" 
//			<< it->second << endl;
//	}*/
//	return 0;
//}

//int main()
//{
//	int a[] = { 16, 3, 7, 11, 9, 26, 18, 14, 15 };
//	//int a[] = { 4, 2, 6, 1, 3, 5, 15, 7, 16, 14 };
//	//int a[] = { 790,760,969,270,31,424,377,24,702 };
//	RBTree<int, int> t;
//	for (auto e : a)
//	{
//		if (e == 18)
//		{
//			int i = 0;
//		}
//
//		cout << "Insert:" << e << "->";
//		t.Insert(make_pair(e, e));
//		cout << t.IsValidRBTRee() << endl;
//	}
//	t.InOrder();
//
//	cout << t.IsValidRBTRee() << endl;
//
//	return 0;
//}


//int main()
//{
//	const int N = 10000000;
//	vector<int> v;
//	v.reserve(N);
//	srand(time(0));
//
//	for (size_t i = 0; i < N; i++)
//	{
//		v.push_back(rand() + i);
//		//cout << v.back() << endl;
//	}
//
//	size_t begin2 = clock();
//	// RBTree<int, int> t;
//	for (auto e : v)
//	{
//		if (e == 29365)
//		{
//			int i = 0;
//		}
//
//		//cout << "Insert:" << e << "->";
//		t.Insert(make_pair(e, e));
//		//cout << t.IsBalance() << endl;
//	}
//	size_t end2 = clock();
//
//	cout << "Insert:" << end2 - begin2 << endl;
//
//	cout << t.IsValidRBTRee() << endl;
//	cout << t.Height() << endl;
//	cout << t.Size() << endl;
//
//	/*size_t begin1 = clock();
//	for (auto e : v)
//	{
//		t.Find(e);
//	}
//
//	for (size_t i = 0; i < N; i++)
//	{
//		t.Find((rand() + i));
//	}
//
//	size_t end1 = clock();
//
//	cout << "Find:" << end1 - begin1 << endl;*/
//
//	return 0;
//}


//void test_set()
//{
//	aj::set<int> s;
//	cout << "empty:" << s.empty() << endl;
//
//	s.insert(1);
//	s.insert(4);
//	s.insert(2);
//	s.insert(3);
//	cout << "empty:" << s.empty() << endl;
//	//cout << s.size() << endl;
//
//	aj::set<int>::iterator it = s.begin();
//	while (it != s.end())
//	{
//		// *it = 10;
//		cout << *it << endl;
//		++it;
//	}
//
//	s.clear();
//	cout << "empty:" << s.empty() << endl;
//	it = s.begin();
//	while (it != s.end())
//	{
//		// *it = 10;
//		cout << *it << endl;
//		++it;
//	}
//}

void test_set()
{
	aj::set<int> s;

	s.insert(1);
	s.insert(4);
	s.insert(2);
	s.insert(3);

	/*aj::set<int>::iterator it = s.find(3);

	cout << *it <<  endl;*/
	cout << s.size() << endl;
	
}

void test_map()
{
	aj::map<int,int> m;
	m.insert(make_pair(1, 1));
	m.insert(make_pair(3, 4));
	cout << "empty:" << m.empty() << endl;

	//cout << m.size() << endl;
	aj::map<int,int>::iterator it = m.begin();
	while (it != m.end())
	{
		// it->first += 10;
		it->second += 10;

		cout << it->first << " " 
			<< it->second << endl;
		++it;
	}
}

int main()
{
	test_set();
	test_map();

	return 0;
}